#include<iostream>
#include<signal.h>
#include<sys/types.h>
#include<unistd.h>

void printblock()
{
    sigset_t set,oset;
    sigemptyset(&set);
    sigemptyset(&oset);
    sigprocmask(SIG_BLOCK,&set,&oset);

    for(int i=31;i>0;i--)
    {
        if(sigismember(&oset,i))
        {
            std::cout<<1;
        }
        else{
            std::cout<<0;
        }
    }
    std::cout<<std::endl;
}

void SIGINTHandle(int signo)
{
    std::cout<<"sigint catch successful sig::"<<signo<<"pid["<<::getpid()<<"]"<<std::endl;

    printblock();
    sleep(1);


}
int main()
{
    struct sigaction act,oact;
    act.sa_handler=SIGINTHandle;
    act.sa_flags=0;
    sigemptyset(&act.sa_mask);
    sigaddset(&act.sa_mask,3);
    sigaddset(&act.sa_mask,4);
    sigaddset(&act.sa_mask,5);
    sigaddset(&act.sa_mask,6);
    sigaddset(&act.sa_mask,7);
    sigaction(SIGINT,&act,&oact);

    pause();
    printblock();
}